package com.lagou.firstStageFourthModel.First;

import java.util.Scanner;

/**
 * 使用 List 集合实现简易的学生信息管理系统，要求打印字符界面提示用户选择相应的功能,
 * 根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。
 * 其中学生的信息有：学号、姓名、年龄。 要求： 尽量将功能拆分为多个.java 文件。
 *
 * 增加功能
 *
 * a.自定义学号异常类和年龄异常类，并在该成员变量不合理时产生异常对象并抛出。
 * b.当系统退出时将 List 集合中所有学生信息写入到文件中，当系统启动时读取文件中所 有学生信息到 List 集合中。
 */
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 声明操作类
        Operation operation = new Operation();

        while (true) {
            // 显示界面
            UserInterface.show();

            System.out.println("请选择需要操作的类型：");
            int op = sc.nextInt();

            if (0 == op) {
                operation.save();
                System.out.println("感谢使用！");
                break;
            } else {
                int number;
                String name;
                int age;
                Student student;

                switch (op) {
                    case 1:
                        System.out.println("请输入学号、姓名、年龄（按次序输入）：");
                        number = sc.nextInt();
                        name = sc.next();
                        age = sc.nextInt();
                        // 处理异常
                        try {
                            student = new Student(number, name, age);
                            operation.add(student);
                        } catch (StudentAgeException | StudentNumberException e) {
                            System.out.println(e.getMessage());
                        }
                        break;
                    case 2:
                        System.out.println("请输入需要删除的学生学号：");
                        operation.remove(sc.nextInt());
                        break;
                    case 3:
                        System.out.println("请输入需要修改的学生学号及修改后的姓名、年龄（按次序输入）：");
                        number = sc.nextInt();
                        name = sc.next();
                        age = sc.nextInt();
                        // 处理异常
                        try {
                            student = new Student(number, name, age);
                            operation.update(number, student);
                        } catch (StudentAgeException | StudentNumberException e) {
                            System.out.println(e.getMessage());
                        }
                        break;
                    case 4:
                        System.out.println("请输入需要查找的学生学号：");
                        number = sc.nextInt();
                        operation.find(number);
                        break;
                    case 5:
                        operation.showAll();
                        break;
                    default:
                        System.out.println("操作类型不存在请重新选择");
                }
            }
        }

        sc.close();
    }
}
